package JUC.Locks;

import java.util.concurrent.TimeUnit;

/**
 * 在线程中增加了Hello方法: 1.Hello 2.发短信 3.打电话
 *
 * 对象一发短信有四秒延迟，对象二打电话: 1.打电话 2.发短信
 * 两个不同对象两把锁，延迟高被锁线程晚
 */

public class Test2 {
        public static void main(String[] args) {
            //两个对象，两个调用者，两把锁
            Phone2 phone1=new Phone2();
            Phone2 phone2= new Phone2();
            new Thread(()->{
                phone1.sendSms();//锁的问题
            },"A").start();
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }

            new Thread(()->{
                phone2.call();
            },"B").start();
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }

//            new Thread(()->{
//                phone2.hello();
//            },"C").start();
//
           }
    }

    class Phone2{

        //被synchronized锁的对象是方法的调用者
        //两个方法同一个锁，谁先拿到谁执行
        public synchronized void sendSms(){
            try {
                TimeUnit.SECONDS.sleep(4);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.println("发短信");
        }

        public synchronized void call(){
            System.out.println("打电话");
        }

        //没有锁!不是同步方法不受锁的影响
        public void hello(){
            System.out.println("Hello");
        }
    }